Media often involves the display of animated or moving objects. For example, a media object may consist of a series of frames played one after another by a media player. The sequential playing of the frames gives the appearance of objects within the frames moving over time. Development of such media can involve painstakingly creating each object in each frame independently. For example, animating a car moving down a street may involve redrawing the street and the car in a different position on the street in each of a series of multiple frames. Certain techniques exist to help developers simplify this otherwise painstaking and repetitive process. Some development tools allow a developer to reuse elements of a previous frame in a subsequent frame. For example, a developer may need to draw the street and the car only once to create the frames of the previous example. After drawing the street and the car for a first frame, the developer can save these objects in a first frame and then use them as a basis for created subsequent frames. A development tool may, for example, allow the developer to simply reposition the car object and save the second frame, reposition the car again and save the third frame, etc. Another technique that can simplify the process of creating animation involves extrapolating between frames created by a developer. In the previous example, a developer may create a first frame with the car at one end of a street and a second frame with the car at a second end of the street. The development tool can use the first and second frames as end points to create additional frames for inclusion in the play sequence of frames. For example, the positions of the car in the end frames can be used to determine several intermediate positions of the car on the street for intermediate frames.
In spite of these and other powerful features, present authoring and media environments could improve with respect to facilitating the movement of more complicated objects. In particular, moving objects that have multiple, interrelated parts continue to present various challenges. One example, is the complexity involved in animating a person or figure waving his or her hand or picking up an object on the ground. The more complex the figure (i.e., the more parts it has), the more difficult this task is for the developer. In many cases, the developer will be required to redraw (or reposition) each component of the object, e.g., the hand, the forearm, the upper arm, the shoulder, the head, etc.
The movement of multi-part and other complicated objects has been facilitated by defining an object as a “hierarchical object.” A “hierarchical object” is any object having at least some components to which a parent-child order has been ascribed (i.e., a first component is the parent of a second component, which is the parent of a third component, etc.). Just as a human figure/body is comprised of a plurality of bones, each bone being interconnected, and having a relationship with the adjacent bones, a hierarchical object can be considered to comprise a plurality of components that are also called “bones.” In one aspect a bone may be visualized as a straight line, or alternatively the bone may be visualized or displayed as a shape. Each of these bones has a base point and a tip point, approximately at each end of the bone, respectively. For example, where a first bone is the parent of a second bone, the tip of the first bone may be “attached” to the base of the second bone. This “attachment” can be used by a development tool to coordinate movement of the object, i.e., when one bone moves the other bone will move to preserve the attachment.
In addition to bones, hierarchical objects may also comprise linked components that are linked (with respect to movement) to the bones of the hierarchy. For example, an outer shape or mesh may be defined based on the position of one or more of the bones. As a specific example, an outer shape may be drawn by a developer and include various control points on the shape. When a bone is moved, any control points associated with the moved bone will cause the shape to move and/or deform. In the case of the person figure example described above, some development tools have allowed a developer to draw, for example, outline shapes of a hand, forearm, upper, arm, shoulder, and the rest of the desired display components of a figure. The developer could then draw and associate a hierarchy of bones with these display components, so that movement of the hand outline shape causes the associated bone hierarchy to move, which then causes the other outline shapes to also move. For example, a single action by a developer moving the hand outline to a new position could automatically result in the repositioning of many (or all) of the other outlined components of the figure object, e.g., the forearm, upper arm, shoulder, hand, etc.
The use of hierarchical objects has been facilitated and/or enhanced with the use of kinematics techniques. For example, inverse kinematics have been used to reposition the bones of hierarchical objects based on a single movement created by a developer. Some development tools implement the kinematics techniques as algorithms executed behind the scenes, i.e., without direct user input or knowledge. Despite the advantages and benefits of using hierarchical object and kinematics techniques in the context of animating objects, many aspects of animation in computer-based media development continue to require significant user interaction.